package com.jxm.hashtab;

/**
 * @Author: jxm
 * @Description: 创建hashTab 管理多条链表 ,使用hash表数据结构来实现
 * @Date: 2022/9/16 16:59
 * @Version: 1.0
 */
public class HashTab {

    private EmpLinkedList[] empLinkedListArray;
    private int size; //表示有多少条链表

    public HashTab(int size){

        this.size = size;

        //初始化empLinkedListArray
        empLinkedListArray = new EmpLinkedList[size];

        //初始化链表
        for (int i = 0; i < size; i++) {

            empLinkedListArray[i] = new EmpLinkedList();

        }
    }

    //添加雇员
    public void add(Emp emp){
        //得到员工id,得到该员工应该添加到哪条链表
        int empLinkedListNO = HashFun(emp.id);
        //将emp添加到对应的链表中
        empLinkedListArray[empLinkedListNO].add(emp);

    }

    //遍历所有链表，遍历hashTab
    public void list(){
        for (int i=0;i<size;i++){
            empLinkedListArray[i].list(i);
        }
    }

    //根据id查找雇员信息
    public void findEmpById(int id){
        int empLinkedListNO = HashFun(id);
        Emp emp = empLinkedListArray[empLinkedListNO].findEmpById(id);
        if (emp !=null){
            System.out.println("链表是:"+empLinkedListNO+"找到：id为"+emp.id+" ,名称为："+emp.name);
        }else {
            System.out.println("在hashTab找不到该雇员");
        }

    }

    //编写散列函数
    public int HashFun(int id){
        return id % size;
    }
}
